DNS 基础
DNS(Domain Name System)是将域名解析为 IP 地址的系统。它是我们日常访问网站时背后的关键技术之一。
🌐 什么是 DNS?
DNS 作用就像互联网的“电话簿”:
当你访问 www.google.com
时,DNS 会告诉你的电脑它对应的 IP 地址(例如 142.250.72.36
)。
🔁 DNS 解析流程
- 浏览器输入网址,例如
www.example.com
- 操作系统查找本地 DNS 缓存
- 若没有缓存,则请求递归 DNS 服务器(通常是运营商或 8.8.8.8)
- 递归 DNS 按顺序向以下服务器查询:
根域名服务器 → 顶级域(.com) → 权威域名服务器 → 返回 IP
🌍 示例流程
- 输入:
www.example.com
- 查询根服务器 → 得到
.com
顶级服务器地址 - 查询
.com
→ 得到 example.com 的权威服务器 - 权威服务器 → 返回
www.example.com
的 IP 地址
📘 常见 DNS 记录类型
类型 | 说明 | 示例 |
---|---|---|
A | 映射到 IPv4 地址 | example.com → 123.123.123.123 |
AAAA | 映射到 IPv6 地址 | example.com → 2001:db8::1 |
CNAME | 别名 | www.example.com → example.com |
MX | 邮件服务器 | mail.example.com |
TXT | 文本记录 | 域名验证、SPF 等 |
🛠️ 编程/部署中的常见 DNS 使用场景
✅ 1. 项目上线绑定域名
部署平台(如 Vercel、AWS)提供临时域名或 IP,使用域名服务商设置:
- A 记录 → 绑定到 IP
- CNAME → 指向平台分配的域名
✅ 2. 修改本地 hosts 文件测试 DNS
# 在 hosts 文件中加入(开发用)
127.0.0.1 api.local.test
之后就可以访问 http://api.local.test
→ 实际映射到本地服务。
🔍 常用 DNS 命令
- Windows
- Linux/macOS
ipconfig /flushdns # 清空 DNS 缓存
ipconfig /displaydns # 查看 DNS 缓存
nslookup www.baidu.com # 查询域名解析
dig www.google.com
host example.com
traceroute www.baidu.com
🧪 示例:使用 Python 查询 DNS 记录
import socket
domain = "www.example.com"
ip = socket.gethostbyname(domain)
print(f"{domain} 的 IP 地址为:{ip}")
❗ 常见 DNS 问题排查
问题 | 原因 |
---|---|
ERR_NAME_NOT_RESOLVED | 域名拼错或没有 DNS 记录 |
域名解析不生效 | DNS 传播延迟(最长 48 小时) |
能 ping IP 但不能访问域名 | DNS 解析异常或被劫持 |
✅ 小结回顾
关键词 | 说明 |
---|---|
DNS | 域名解析系统 |
A/CNAME | 将域名映射到 IP 或另一个域名 |
权威服务器 | 最终控制域名解析的服务器 |
递归查询 | DNS 服务器逐级帮你找到最终地址 |